iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
0
自我挑戰組

Codewars Ruby Challenge in 30 Days系列 第 1

Codewars Ruby Challenge  -  Day 1/30

  • 分享至 

  • xImage
  •  

題目:

class Cat
  # 實作內容
end

答案需為:

kitty = Cat.new('Mr Whiskers')
kitty.speak   # 印出 Mr Whiskers meows.

nancy = Cat.new('Lamp')
nancy.speak   # 印出 Lamp meows.

sherly = Cat.new('$$Money Bags$$')
sherly.speak  # 印出 $$Money Bags$$ meows.

我的答案

class Cat
  def initialize(name)
    @name = name
  end
  def speak
    puts "#{@name} meows."
  end
end

思路:

  1. Cat.new 在新增實體時有初始值,所以需要新增 initialize 的方
  2. 法在最後要透過「kitty.speak」印出答案,speak 屬於實體方法,所以要在生出 kitty 這個實體的類別「Cat」裡面加入 speak 方法
  3. 印出的結果還需要「meows.」加料,所以需要用 puts 能插入變數的 #{}

龍哥建議的答案

class Cat
  def initialize(name)
    @name = name
  end
  def speak
    puts "#{@name} meows."
  end
end

(剛好這題比較簡單,跟龍哥寫得一模一樣呢XD)

學習

  1. 寫 initialize 的時候一直想到 attr_accessor,想說是相同可以取代的,後來才發現根本兩回事,但也順道複習了一下 getter 與 setter
class Cat
  # 等於同時寫
  # attr_reader :name
  # attr_writer :name
  attr_accessor :name

  def initialize(name)
    @name = name
  end

  # (getter)這邊等於 attr_reader :name 
  # def name
  #   return @name
  # end

  # (getter)這邊等於 attr_writer :name 
  # def name=(new_name)
  #   @name = new_name
  # end
end

kitty = Cat.new("yo")
kitty.name = "Mary"
puts kitty.name

下一篇
Codewars Ruby Challenge - Day 2/30
系列文
Codewars Ruby Challenge in 30 Days30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言